SMDX
Содержание
Введение
Файл SMDX (Summary MoDel eXtensible) представляет собой подписанный цифровой подписью zip-архив, с данными в общепринятых форматах (json, png, pdf) и включает в себя:
- сводную информационную модель;
- прикрепленные документы (опционально);
- выходные документы (опционально);
- исходную геометрию (опционально).
Для просмотра SMDX-файла может быть использована утилита «Инспектор проектов Топоматик Robur», web-приложения, типа 360.topomatic.ru, или программы других разработчиков.
Структура файла SMDX
Документ SMDX – это zip-архив, корневые элементы которого имеют фиксированные имена.
Файл content.json содержит семантическую информацию и ссылки на все элементы информационной модели.
Примечание. Файлы формата json (JavaScript Object Notation) являются структурированными текстовыми файлами, для редактирования которых используется любой текстовый редактор, например, «Блокнот» (Notepad). Нотация json-файлов подразумевает использование пар ключ/значение для описания состояния объекта. Пары разделяются символом «,». Ключ и значение разделены символом «:».
Также внутри SMDX-файла расположены следующие папки:
geometry – файлы формата json с расширением j3d. Файлы j3d содержат геометрические данные трёхмерных моделей.
materials – файлы формата json с расширением jmtl с описание материалов, поверхностей трёхмерных моделей. Материалы могут использовать текстуры и шейдеры.
textures – файлы растровых изображений в формате png (Portable Network Graphics), используемые в материалах.
effects – файлы шейдеров — текстовые файлы с расширение fx, содержащие в себе инструкции на языке программирования GLSL.
documents – материалы фото и видеофиксации, текстовые документы, таблицы, чертежи и другие файлы произвольного формата, ассоциированные с элементами информационной модели.
materials – файлы формата json с расширением jmtl с описание материалов, поверхностей трёхмерных моделей. Материалы могут использовать текстуры и шейдеры.
textures – файлы растровых изображений в формате png (Portable Network Graphics), используемые в материалах.
effects – файлы шейдеров — текстовые файлы с расширение fx, содержащие в себе инструкции на языке программирования GLSL.
documents – материалы фото и видеофиксации, текстовые документы, таблицы, чертежи и другие файлы произвольного формата, ассоциированные с элементами информационной модели.
Описание информационной модели content.json
Файл content.json содержит следующие пары ключ/значение для описания цифровой модели:
Ключ wcs - Массив координат X, Y, Z базовой точки модели относительно которой будут располагаться все элементы цифровой модели.
Пример:
"wcs": [ 18507.6695087205, 9450.49877065809, 67.5458837355353 ]
"wcs": [ 18507.6695087205, 9450.49877065809, 67.5458837355353 ]
Ключ insertions - Массив, содержащий информацию о расположении элементов цифровой модели в пространстве. Каждое описание состоит из следующих параметров:
- geometry – индекс массива ключа geometry;
- group – индекс массива ключа group;
- position – массив со значениями приращения координат относительно координат базовой точки описанной в значении ключа wcs. Полученные значения в последствии используются в качестве точки вставки трёхмерной модели;
- scale – массив значений масштаба по осям XYZ. Если параметр отсутствует, то используется значение по умолчанию равное единице по всем трём осям;
- angle – числовое значение угла поворота элемента относительно нормали в радианах. Если параметр отсутствует, то используется значение по умолчанию равное нулю;
- normal – массив координат XYZ вектора к плоскости, в которой расположен элемент. Если параметр отсутствует, то используется значение по умолчанию, где X = 0, Y = 0, Z = 1 ([0.0, 0.0, 1.0]).
Пример:
"insertions": [
{ "geometry": 5, "group": 31, "position": [ 14.36481, -258.5793, 3.175319 ], "scale": [
1.011675, -1.00532, 1 ], "normal": [ -0.139017, 0.08973963, 0.9862155 ], "angle": 2.144023 },
{ "geometry": 5, "group": 31, "position": [ 14.36481, -253.5793, 2.917289 ], "scale": [
-1.011675, 1.000008, 1 ], "normal": [ -0.1514821, -7.2001E-05, 0.98846 ], "angle": 4.712389 }]Ключ geometry - Массив, содержащий информацию о трёхмерных моделях, используемых в построении цифровой модели. Каждое описание может содержать следующий набор параметров:
- href – имя файла с расширением j3d расположенного в папке geometry;
- bounds – массив координат XYZ описывающих границы трёхмерного объекта;
- lods – массив параметров, описывающих выбор трёхмерной модели с разной детализацией в зависимости от расстояния до точки обзора в окне просмотра. Используется для оптимизации работы графического процессора.
Пример:
"geometry": [
{ "href": "lining.j3d", "bounds": [ -0.9927897, -0.08525, 0.09433599, 0.9927897, 0.08525, 0.2325319 ], "lods": [
{ "distance": 25, "href": "lining-lod300.j3d"},
{ "distance": 50, "href": "lining-lod50.j3d"}
]
},
{ "href": "vegetation31.j3d", "bounds": [ -2.720446, -2.808087, 0, 2.792925, 2.829055, 0.5194162 ], "lods": [
{ "distance": 0, "href": "vegetation2F.j3d" } ]
}] Ключ textures - Массив, содержащий описание текстур, используемых при рендеринге цифровой модели. Каждое описание может содержать следующий набор параметров:
- name – имя текстуры;
- width – ширина текстуры;
- height – высота текстуры;
- format – перечисление, указывающее на используемые каналы. 0 –альфа канал, 1 – сплошной цвет + альфа канал, 2 – оттенки серого, 3 – сплошной цвет;
- filter – перечисление, указывающее на тип текстуры. 0 – текстура, хранящая цвета, 1 – карта нормалей;
- mipmaps – литерал принимающий значение true или false, указывающий необходимость генерации mipmap-уровней;
- source – массив описаний областей используемой текстуры.
Пример:
"textures": [
{
"name": "vegetation2F.j3d.agt",
"width": 256,
"height": 256,
"format": 0,
"filter": 0,
"mipmaps": false,
"source": [
{
"width": 256,
"height": 256,
"x": 0,
"y": 0,
"target": [
{
"world": [ 1, -1.22460635382238E-16, 0, 0, 1.22460635382238E-16, 1,
0, 0, 0, 0, 1, 0, -7.5, -7.5, 0, 1 ],
"view": [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1.30000001192093, 1 ],
"projection": [ 0.2, 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 3.33333320087857, 0, 0, 0, -3.33333320087857, 1 ],
"geometry": "vegetation.j3d",
"technique": "RenderTexture"
},
{
"world": [ -6.12303176911189E-17, -1, 0, 0, -1, 6.12303176911189E-
17, 0, 0, 0, 0, 1, 0, -2.5, -7.5, 0, 1 ],
"view": [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1.30000001192093, 1 ],
"projection": [ 0.2, 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 3.33333320087857, 0, 0, 0, -3.33333320087857, 1 ],
"geometry": "vegetation2F.j3d",
"technique": "RenderTexture"
}
]
}
]
},Ключ types - Массив, содержащий описание типов элементов, используемых в цифровой модели. Каждое описание состоит из следующих параметров:
id – идентификатор типа;
name – имя типа;
parent – индекс массива types, указывающий на родительский тип. Текущий тип будет наследовать свойства своего родительского типа;
properties – массив описаний свойств присущих данному типу.
name – имя типа;
parent – индекс массива types, указывающий на родительский тип. Текущий тип будет наследовать свойства своего родительского типа;
properties – массив описаний свойств присущих данному типу.
Пример:
"types": [
{ "id": "SmdxElement", "name": "Элемент проекта",
"properties": [
{ "tag": "status_type", "name": "Статус", "value": "DESIGNED",
"info": {
"type": "enum",
"values": {
"UNDEFINED": "Не определено",
"EXISTING": "Существующий",
"DESIGNED": "Проектный",
"DISMANTLING": "Демонтируемый",
"DISMANTLED": "Демонтированный"}
} }
]
},
{ "id": "SmdxSurface", "name": "Поверхность", "parent": 0,
"properties": [
{ "tag": "area2d", "name": "Площадь 2D",
"info": {
"type": "float",
"units": "m^2"
} },
{ "tag": "area3d", "name": "Площадь 3D",
"info": {
"type": "float",
"units": "m^2"
} }
]
}] Ключ groups - Массив содержащий описание групп, в которые собираются элементы массива ключа insertion. Каждое описание может содержать следующий набор параметров:
name – имя группы;
parent – индекс массива groups, указывающий на родительскую группу. Текущая группа будет наследовать свойства своей родительской группы;
type – индекс массива types, указывающий на тип, используемый для данной группы;
properties – массив описаний свойств присущих данной группе.
parent – индекс массива groups, указывающий на родительскую группу. Текущая группа будет наследовать свойства своей родительской группы;
type – индекс массива types, указывающий на тип, используемый для данной группы;
properties – массив описаний свойств присущих данной группе.
Описание трёхмерной модели j3d
В одном файле с расширением j3d может содержаться описание только одной трёхмерной модели. Трёхмерная модель состоит из полигональных сетей (Mesh). Mesh’ы описываются парой ключ/значение, где ключом будет имя mesh’а, а значением будет набор пар ключ/значение с описанием геометрических данных этого mesh’a.
Геометрические данные описаны при помощи следующих пар ключ/значение:
Ключ positions – массив координат XYZ описывающих опорные точки треугольников из которых состоит mesh;
Ключ triangles – массив целых чисел, используемый для получения индекса треугольника, полученного из массива positions. Первое значение уже является индексом, а последующие индексы получаются посредством сложения текущего индекса и следующего значения массива triangles;
Ключ textures – массив текстурных координат XY описывающих область текстуры, используемую треугольником. Количество элементов массива соответствует количеству элементов массива positions;
Ключ groups – набор параметров, определяющий материалы и интервалы треугольников, использующие их.
Ключ triangles – массив целых чисел, используемый для получения индекса треугольника, полученного из массива positions. Первое значение уже является индексом, а последующие индексы получаются посредством сложения текущего индекса и следующего значения массива triangles;
Ключ textures – массив текстурных координат XY описывающих область текстуры, используемую треугольником. Количество элементов массива соответствует количеству элементов массива positions;
Ключ groups – набор параметров, определяющий материалы и интервалы треугольников, использующие их.
Пример:
{
"main_0":{
"positions":[4.639927,268.59,31.72411,5.04136,268.59,31.70411,5.081371,268.1459,31.77418,4.5961 07,268.1426,31.72619],
"triangles":[2,-1,-1,0,3,-1],
"textures":[0.1546642,8.953,0.1680453,8.953,0.169379,8.938197,0.1532036,8.938087],
"groups":{
"default1.jmtl":[0,1]
} }
} Materials
Файлы с расширением jmtl содержат информацию о материалах, используемых трегольниками трёхмерных моделей. Набор свойств, описанных в файле зависит от типа материала. Тип материала Blinn-Phong обладает стандартным набором свойств для данного алгоритма:
type – тип материала;
ambient– фоновое освещение;
diffuse– рассеянный свет;
specular– бликовая составляющая;
shininess– резкость зеркальных бликов;
level– уровень яркости;
blur– степень размытия;
transparency– степень прозрачности;
illumination– сила свечения;
shading– тип затенения;
ambient– фоновое освещение;
diffuse– рассеянный свет;
specular– бликовая составляющая;
shininess– резкость зеркальных бликов;
level– уровень яркости;
blur– степень размытия;
transparency– степень прозрачности;
illumination– сила свечения;
shading– тип затенения;
Пример:
{
"type": "Blinn–Phong",
"ambient": [ 0.01176471, 0.007843138, 0.003921569 ], "diffuse": [ 0.01176471, 0.007843138, 0.003921569 ],
"specular": [ 1, 1, 1 ],
"level": 0.4,
"shininess": 0.2,
"blur": 0,
"transparency": 0,
"illumination": 0,
"shading": "Wire",
"flags": 0,
"wire": 1
} Для типа материала Effect, использующего шейдеры, набор свойств будет определяться самим шейдером и может быть любым.
Пример:
{
"type": "Effect",
"name": "Leaf.fx",
"technique": "Main",
"format": 34,
"vs": "VS_1_1",
"ps": "PS_1_1",
"title": "",
"description": "",
"order": 0,
"define": "",
"variables": [
{ "name": "BasicTexture", "type": "texture2D", "value": "PineLeaf.png", "compress":
true, "mipmaps": true, "normals": false, "height": false, "title": "ShaderParameter",
"description": "", "widget": "Texture", "hidden": false },
{ "name": "Center", "type": "float3", "value": [ -114.1763, 85.94911, 1224.606 ],
"title": "ShaderParameter", "description": "", "widget": "", "hidden": false } ]
} Спецификация формата
SMDX является форматом с открытой спецификацией.
Спецификация формата доступна по адресу: http://smdx.info/.
Также на сайте представлен пример информационной модели и ссылка на репозиторий типов на GitHub: https://github.com/smdxtypes/smdx
Спецификация формата доступна по адресу: http://smdx.info/.
Также на сайте представлен пример информационной модели и ссылка на репозиторий типов на GitHub: https://github.com/smdxtypes/smdx